package codetrainning.test4;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

/*
1.键盘录入一个正整数 必须大于10 不大于10 提示继续录入出具
  2.使用键盘录入的数据,创建数组
  3.使用20-100之间的随机数填充数据
  4.求数组的最大值最小值 平均值
  5.使用冒泡排序算法对数组排序
  6.使用键盘录入一个数据使用二分法查找算法(自己写二分法查找) 查找数据如果存在返回数据对应的索引 如果不存在返回-1
 */
public class Demo4 {
    private static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        int num = getArrayLength();

        //2.使用键盘录入的数据,创建数组
        int [] arr = new int[num];

        //3.使用20-100之间的随机数填充数据
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random()*81+20);
        }

        //5.使用冒泡排序算法对数组排序
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));

        //  4.求数组的最大值最小值 平均值
        int max = arr[arr.length-1];
        int min = arr[0];
        int avg = getSum(arr)/arr.length;
        System.out.println("max = "+max+", min = "+min+", avg = "+avg);

//        6.使用键盘录入一个数据使用二分法查找算法(自己写二分法查找) 查找数据如果存在返回数据对应的索引 如果不存在返回-1
        int index=-1;
        try {
            System.out.println("请输入要查找的数据");
            String s = sc.next();
            int number = Integer.parseInt(s);
            index = halfSearch(arr,number);
        } catch (NumberFormatException e) {
            System.out.println("请输入数字");
        }

        //判断索引值
        if(index == -1){
            System.out.println("该数不存在与数组");
        }else {
            System.out.println("存在，索引值为："+index);
        }


    }

    private static int halfSearch(int [] arr,int num){
        int max = arr.length -1;
        int min = 0;
        while (min <= max){
            int mid = (max + min) >> 1;
            if(num > arr[mid]){
                min = mid + 1;
            }else if (num < arr[mid]){
                max = mid - 1;
            }else {
                return mid;
            }
        }
        return -1;
    }

    private static int getSum(int [] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    private static int getArrayLength(){
        int num = 0;
        //1.键盘录入一个正整数 必须大于10 不大于10 提示继续录入出具
        while (true) {
            System.out.println("请输入数组长度");
            String numStr = sc.next();
            num = Integer.parseInt(numStr);

            if(num > 10){
                break;
            }else {
                System.out.println("请输入大于10的数");
            }
        }
        return num;
    }

    public static void bubbleSort(int [] arr){
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j+1]) {
                    arr[j] = arr[j] ^ arr[j+1];
                    arr[j+1] = arr[j] ^ arr[j+1];
                    arr[j] = arr[j] ^ arr[j+1];
                }
            }
        }
    }

}
